﻿// MyLib.cpp : 定义控制台应用程序的入口点。
//
/////////////////////////////////////////////////////////
//头文件
#pragma warning(disable:4996)
#include <stdio.h>
/////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////
//我的winsock初始化类
#include <WinSock2.h>
#pragma comment(lib, "WS2_32.lib")

class CMyInitSocket
{
public:
	CMyInitSocket()
	{
		WSADATA wd;
		WORD sv = MAKEWORD(2, 2);
		WSAStartup(sv, &wd);
	}

	~CMyInitSocket()
	{
		WSACleanup();
	}
};

CMyInitSocket initWinsock;
/////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////
/*函数功能: 获取本机ip/port
返回值 = 成功返回本机IP 失败返回0
*/
/////////////////////////////////////////////////////////
u_long GetLocalIP()
{
	SOCKET sGetIP = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

	sockaddr_in StunAddr;
	StunAddr.sin_family = AF_INET;
	StunAddr.sin_addr.S_un.S_addr = inet_addr("91.121.74.28");
	StunAddr.sin_port = htons(6969);

	if(connect(sGetIP, (sockaddr*)&StunAddr, sizeof(StunAddr)) < 0)
	{
		return 0;
	}

	sockaddr_in LocalAddr = {0};
	int nAddrLen = sizeof(sockaddr_in);
	if (getsockname(sGetIP, (sockaddr*)&LocalAddr, &nAddrLen) < 0)
	{
		return 0;
	}

	closesocket(sGetIP);
	return LocalAddr.sin_addr.S_un.S_addr;
}
/////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////
//函数功能:判断某个IP地址是否为私有地址
//参数1:ip地址 字符串类型
//返回值:是私有地址返回true 否则返回false
/////////////////////////////////////////////////////////
bool isPrivateAddr(char* lpAddr)
{
	//1. 确定私有地址范围
	unsigned int uPrivateAddr = inet_addr(lpAddr);
	unsigned int uAAddr1 = inet_addr("10.0.0.0");
	unsigned int uAAddr2 = inet_addr("10.255.255.255");
	unsigned int uBAddr1 = inet_addr("172.16.0.0");
	unsigned int uBAddr2 = inet_addr("172.31.255.255");
	unsigned int uCAddr1 = inet_addr("192.168.0.0");
	unsigned int uCAddr2 = inet_addr("192.168.255.255");

	//2. 转换成主机字节序
	uPrivateAddr = ntohl(uPrivateAddr);
	uAAddr1 = ntohl(uAAddr1);
	uAAddr2 = ntohl(uAAddr2);
	uBAddr1 = ntohl(uBAddr1);
	uBAddr2 = ntohl(uBAddr2);
	uCAddr1 = ntohl(uCAddr1);
	uCAddr2 = ntohl(uCAddr2);

	//3. 开始判断是否属于私有地址的某个范围
	//a类
	if ((uPrivateAddr > uAAddr1) && (uPrivateAddr < uAAddr2))
	{
		return true;
	}
	//b类
	if ((uPrivateAddr > uBAddr1) && (uPrivateAddr < uBAddr2))
	{
		return true;
	}
	//c类
	if ((uPrivateAddr > uCAddr1) && (uPrivateAddr < uCAddr2))
	{
		return true;
	}

	//4. 如果不在上述范围 则不是私有地址
	return false;
}
/////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////
//宏定义
#define WZLLOGPATH "c:\\wzllog.txt"
/////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////
/*函数功能: 输出log日志
*/
/////////////////////////////////////////////////////////
void MyFunLog(char* lpStr)
{
	static FILE* lplog = fopen(WZLLOGPATH, "a+");
	fprintf(lplog, lpStr);
	fflush(lplog);
}
/////////////////////////////////////////////////////////


int main(int argc, char* argv[])
{


	return 0;
}

